package com.edu.exam.enums.assessment;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 标准类型枚举
 *
 * 考核标准类型管理，定义各种评价和评分标准类型
 *
 * @author System
 * @version 1.0.0
 */
public enum StandardType implements BaseEnum {

    /**
     * 及格标准
     */
    PASS_SCORE("PASS_SCORE", "及格标准"),

    /**
     * 等级标准
     */
    GRADE_LEVEL("GRADE_LEVEL", "等级标准"),

    /**
     * 分数标准
     */
    SCORE_LEVEL("SCORE_LEVEL", "分数标准"),

    /**
     * 百分比标准
     */
    PERCENTAGE("PERCENTAGE", "百分比标准"),

    /**
     * 描述标准
     */
    DESCRIPTOR("DESCRIPTOR", "描述标准"),

    /**
     * 表现标准
     */
    PERFORMANCE("PERFORMANCE", "表现标准"),

    /**
     * 出勤标准
     */
    ATTENDANCE("ATTENDANCE", "出勤标准"),

    /**
     * 完成度标准
     */
    COMPLETION("COMPLETION", "完成度标准"),

    /**
     * 质量标准
     */
    QUALITY("QUALITY", "质量标准"),

    /**
     * 效率标准
     */
    EFFICIENCY("EFFICIENCY", "效率标准");

    private final String code;
    private final String description;

    StandardType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 从代码创建枚举实例
     *
     * @param code 枚举代码
     * @return 对应的枚举实例
     * @throws IllegalArgumentException 如果代码无效
     */
    public static StandardType fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            throw new IllegalArgumentException("Code cannot be null or empty");
        }
        for (StandardType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("Unknown code: " + code);
    }

    /**
     * 从描述创建枚举实例
     *
     * @param description 枚举描述
     * @return 对应的枚举实例
     * @throws IllegalArgumentException 如果描述无效
     */
    public static StandardType fromDescription(String description) {
        if (description == null || description.trim().isEmpty()) {
            return null;
        }
        for (StandardType type : values()) {
            if (type.getDescription().equals(description)) {
                return type;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return description;
    }
}